home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
TPUG - Toronto PET Users Group
/
TPUG Users Group CD
/
TPUG Users Group CD.iso
/
AMIGA
/
FAUG
/
FAUG05.ADF
/
milestonegame.bas
< prev
next >
Wrap
BASIC Source File
|
1992-01-03
|
14KB
|
191 lines
10 ' ************************************
12 ' ** **
13 ' ** MILE STONE **
14 ' ** ---------- **
15 ' ** AMIGA VERSION BY **
16 ' ** David Addison **
17 ' ** **
18 ' ** C 1986 **
19 ' ** **
20 ' ************************************
21 ' ************************************
75 clr:SCREEN 0,5:graphic 1:drawmode 1
80 DIM picture%(11000),regsave%(100),mplay%(200),mdiscard%(200),mblank%(200)
85 bload "milestone_pic",VARPTR(picture%(0))
87 bload "milestone_dat",VARPTR(regsave%(0)):bload "milestone-P",VARPTR(mplay%(0))
89 bload "milestone-D",VARPTR(mdiscard%(0))
90 GOSUB 10000
93 gshape (0,0),picture%():sshape (65,12;85,20),mblank%()
110 e=106:red=19:yellow=26:green=8:brown=30:dblue=28:mblue=8:purp=21
115 bk0=2:bk1=8:bk2=10:bk3=13:bk4=14:bk5=29
120 DIM s(7),c(e),t$(20),pl(1,3),h(1,7),t1(4),t2(4,5),tb(1),qq(1),safety(1,5),sinewave%(11)
140 DATA OUT OF GAS,FLAT TIRE,ACCIDENT,SPEED LIMIT(50),STOP
150 DATA GAS,SPARE TIRE,REPAIRS,END SPEED LIMIT,ROLL
160 DATA EXTRA TANK,PERMANENT TIRE,DRIVING ACE,R,RIGHT-OF-WAY
170 DATA 200,100,75,50,25
180 nm$="HAZARD REMEDY SAFETY DISTANCE "
185 bl$=" ":bl0$=" "
187 FOR n=1 TO 20
190 READ t$(n)
195 NEXT n
200 DATA 18,56,60,106,4,7,10,14,19,25,31,37,43,57,58,59,60,60,61,65,77,87,97,107
210 FOR i=1 TO 4:READ t1(i):NEXT i
220 FOR i=1 TO 4:FOR j=1 TO 5
230 READ t2(i,j):NEXT j:NEXT i
235 data 100,90,60,100,90,60,-100,-90,-60,-100,-90,-60
236 for kk%=0 to 11:read sinewave%(kk%):next kk%:audio 15,1:wave 6,sinewave%
240 g=0:FOR i=1 TO e:c(i)=i:NEXT i:s(0)=0:s(1)=0:play=1
250 graphic 1:pena dblue:penb bk0:PRINT at(2*8,6); "SHUFFLING...":GOSUB 740:GOSUB 820:sleep(100000)
260 FOR i=0 TO 1:FOR j=0 TO 3:pl(i,j)=0:NEXT j:tb(i)=10:qq(i)=6:NEXT i
265 FOR i=0 TO 1:FOR j=1 TO 5:safety(i,j)=0:NEXT j:NEXT i
270 FOR i=0 TO 1:FOR j=1 TO 6
280 cn=cn+1:h(i,j)=c(cn):NEXT j:NEXT i
290 LOCATE (0,6+4*8):pena brown:penb bk1
300 FOR a=1 TO 6:c=h(1,a):GOSUB 780:PRINT AT(2*8,6+(3+a)*8);n$:NEXT a
310 p=1:cn=cn+1:IF cn>e THEN s=s+1:IF s>6 THEN n$="NOBODY":GOTO 1740
320 IF s>0 THEN 360
325 pena purp:penb bk5:locate(270,75):print using "###";106-cn
330 c=c(cn):h(1,0)=c:GOSUB 780:pena brown:penb bk1
340 PRINT at(2*8,6+3*8);bl$
350 PRINT at (2*8,6+3*8);n$
360 pena mblue:penb bk0:PRINT at(1*8,6),bl0$:PRINT at (2*8,6); "YOUR MOVE":flag=0
370 GOSUB 9000:pena brown:penb bk1
380 GOSUB 5000:storey%=4+s
385 ask MOUSE x%,y%,b%
390 IF y%<6 OR y%>19 OR x%<0 OR x%>163 THEN 385
395 IF y%>11 AND y%<20 AND x%>5 AND x%<50 AND b%=4 THEN gshape (65,12),mplay%():play=1:GOTO 402
400 IF y%>11 AND y%<20 AND x%>100 AND x%<164 AND b%=4 THEN gshape (65,12),mdiscard%():play=0:GOTO 402
402 if b%<>4 then 385
403 ask mouse x%,y%,b%:if b%<>0 then 403
405 cur%=INT(y%/8):IF cur%<3+s OR cur%>9 THEN 411
407 IF cur%<>storey% and s<>6 THEN c=h(1,storey%-3):GOSUB 780:PRINT at(8*2,6+(storey%)*8);n$;
409 IF cur%<>storey% or s=6 THEN c=h(1,cur%-3):GOSUB 780:PRINT at(8*2,6+(cur%)*8);inverse(1) n$;:storey%=cur%
411 ask MOUSE x%,y%,b%
412 IF y%<6 OR y%>80 OR x%<0 OR x%>163 THEN 411
414 IF b%=4 THEN 418
416 GOTO 405
418 n=cur%-3
419 print at(8*2,6+(storey%)*8);n$;
420 gshape (65,12),mblank%()
422 if n<s or n>6 then 360
430 IF play=0 THEN GOSUB 920:GOSUB 900:GOTO 460
440 GOSUB 880
450 IF ch=0 THEN penb bk0:pena red:PRINT ",OK ";
451 if ch=0 then ask mouse x%,y%,b%:if b%=0 then 451
452 if ch=0 then ask mouse x%,y%,b%:if b%=4 then 452 else goto 360
460 penb bk1:PRINT at(2*8,6+(3+s)*8);bl$
470 IF pl(1,0)=1000 THEN n$="YOU":GOTO 1740
480 d$="PLAY"
490 pena dblue:penb bk0:PRINT at(1*8,6),bl0$
500 PRINT at (2*8,6); "THINKING....":p=0:cn=cn+1:flag=0:sleep(50000)
510 GOSUB 8000
520 IF s=0 THEN h(0,0)=c(cn):pena purp:penb bk5:locate(270,75):print using "###";106-cn
530 hz=pl(0,2):IF hz>-1 AND pl(0,1)>-1 THEN 600
540 GOSUB 1470:IF cf THEN safety(0,m)=1:pl(0,cf)=m:s(2)=s(2)+300
550 IF cf THEN s(4)=s(4)+100:GOTO 720
560 IF s OR pl(1,0)>790 OR pl(0,0)>790 THEN GOSUB 1680:IF sf THEN 720
570 GOSUB 1430:IF ch THEN pl(0,ch)=m:GOTO 720
580 IF pl(0,2)>-1 THEN 600
590 GOTO 680
600 IF pl(0,2)<5 THEN 670
610 lm=201:IF pl(0,1)<0 THEN lm=51
620 IF lm<200 AND pl(0,0)<900 THEN GOSUB 1400:IF ch THEN pl(0,1)=4:GOTO 720
630 ch=0:d=0:FOR a=s TO 6:c=h(0,a):GOSUB 780:b=VAL(n$):IF b=0 THEN 650
640 IF b<lm AND (b+pl(0,0)<1001) AND b>d THEN d=b:n=a:ch=1
650 NEXT a:IF ch THEN pl(0,0)=pl(0,0)+d:GOTO 720
660 GOTO 680
670 GOSUB 1530:IF ch AND (pl(0,2)>-1) THEN pl(0,2)=5:GOTO 720
680 IF pl(1,2)<0 AND pl(1,1)<0 THEN 710
690 GOSUB 1330:IF ch=1 AND pl(1,0)<950 THEN pl(1,1)=-4:GOTO 720
700 IF ch=2 AND pl(1,2)=5 THEN pl(1,2)=-m:GOTO 720
710 GOSUB 1550
720 GOSUB 1800:IF pl(0,0)=1000 THEN n$="I":GOTO 1740
730 GOSUB 2100:GOTO 310
740 cn=0:en=e+1:s=0:randomize -1
750 FOR i=2 TO 5:s(i)=0:NEXT i
760 FOR i=1 TO e:r=INT(i+(en-i)*RND(8)):t=c(i):c(i)=c(r):c(r)=t
770 NEXT i:RETURN
780 FOR i=1 TO 4:FOR j=1 TO 5
790 IF c>t1(i) THEN j=5:GOTO 810
800 IF c<t2(i,j) THEN start=((i-1)*5+1)+((j-1)):n$=t$(start):k=i:l=j:i=4:j=5
810 NEXT j:NEXT i:RETURN
820 REM
870 RETURN
880 c=h(1,n):GOSUB 780:GOSUB 960:p=1
890 IF ch=0 THEN pena dblue:penb bk0:print at(1*8,6);bl0$:PRINT at(2*8,6);ms$;:RETURN
900 GOSUB 950:j=n+5+6*(1-p):pena brown:penb bk1:GOSUB 2090:PRINT bl$
905 IF n=0 THEN c=h(p,n):GOSUB 780:RETURN
910 pena brown:penb bk1:ask cursor hor%,vert%:c=h(p,n):GOSUB 780:PRINT at(2*8,(vert%-8));n$:RETURN
920 c=h(p,n):GOSUB 780
930 pena dblue:penb bk2:PRINT at(22*8,3+6*8);" ":GOSUB 6000
935 ln=29-Int(len(n$)/2):? at(ln*8,3+6*8);n$
940 LOCATE (0,6):RETURN
950 h(p,n)=h(p,s):RETURN
960 p=1:ms$="":ON k GOTO 1040,1120,1240,970
970 d=VAL(n$):IF pl(1,0)+d>1000 THEN ms$="YOU HAVE EXCEEDED 1000"
980 IF pl(1,1)=-4 AND d>50 THEN start=((1-1)*5+1)+((4-1)):ms$="YOU HAVE A "+t$(start)
990 IF pl(1,2)<5 THEN ms$="YOU DON'T HAVE A ROLL CARD"
1000 IF pl(1,2)<0 THEN ms$="YOU HAVE A HAZARD"
1010 IF ms$<>"" THEN ch=0:RETURN
1020 pl(1,0)=pl(1,0)+d:ch=1:pena 3:penb bk3
1030 n$=STR$(pl(1,0)):LOCATE(33*8,6+11*8):PRINT USING "####";pl(1,0):ch=1:gosub 4000:RETURN
1040 IF l<>4 AND pl(0,2)<5 THEN ms$="I DON'T HAVE A ROLL CARD"
1050 IF l<>4 AND pl(0,2)<0 THEN ms$="I ALREADY HAVE A HAZARD"
1060 IF l=4 AND pl(0,1)<0 THEN ms$="I HAVE A SPEED LIMIT"
1070 IF l=4 AND safety(0,5)=1 THEN start=((3-1)*5+1)+((5-1)):ms$="I HAVE "+t$(start)
1080 IF safety(0,l)=1 THEN ms$="HA!-I HAVE THE SAFETY"
1090 IF ms$<>"" THEN ch=0:RETURN
1100 I ⁿ <